package com.gsocket.event.check;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 主板格式校验
 *
 * @author sakura
 * @since 2024/03/05
 */
public class BoardSend485Check extends CheckDecorator {
    public BoardSend485Check(ReveCheck check) {
        super(check);
    }


    @Override
    public byte[][] getMsg(byte[] msg) {
        List<byte[]> msgList = new ArrayList<>();
        int start = 0;
        // 找到开头
        for (int i = 0; i < msg.length; i++) {
            if (msg[i] == (byte) 0xbb) {
                start = i;
                break;
            }
        }
        while (start < msg.length) {
            int len = bytes2int(Arrays.copyOfRange(msg, start + 1, start + 3));
            msgList.add(Arrays.copyOfRange(msg, start, start + len + 4));
            start += len + 4;
        }
        //    将msgList转换为数组并返回
        return msgList.toArray(new byte[0][]);
    }

    @Override
    public byte[] getData(byte[] msg) {
        byte[] data = super.getData(msg);
        return Arrays.copyOfRange(data, 20, data.length - 2);
    }

    @Override
    public boolean check(byte[] msg) {
        // 是否为空
        if (msg == null || msg.length == 0) {
            return false;
        }
        //for (byte[] m : getMsg(msg)) {
        //    for (byte b : m) {
        //        System.out.printf("%02x ", b);
        //    }
        //    System.out.println();
        //}
        // 是否是发送485
        if (msg[6] != (byte) 0x32) {
            return false;
        }
        // 不是bb开头或者不是66结尾，则不合法
        if (msg[0] != (byte) 0xbb || msg[msg.length - 1] != 0x66) {
            return false;
        }

        return super.check(msg);
    }


    public static void main(String[] args) {
        //byte[] msg = {(byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x2c, (byte) 0x97, (byte) 0x12, (byte) 0x10, (byte) 0x32, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1a, (byte) 0x00, (byte) 0xfe, (byte) 0xfe, (byte) 0xfe, (byte) 0xfe, (byte) 0x68, (byte) 0x31, (byte) 0x12, (byte) 0x81, (byte) 0x41, (byte) 0x00, (byte) 0x01, (byte) 0x68, (byte) 0x91, (byte) 0x0a, (byte) 0x34, (byte) 0x37, (byte) 0x33, (byte) 0x37, (byte) 0x64, (byte) 0x45, (byte) 0xb4, (byte) 0x74, (byte) 0x33, (byte) 0x34, (byte) 0x7e, (byte) 0x16, (byte) 0xd8, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x1b, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x18, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x19, (byte) 0x66, (byte) 0xbb, (byte) 0x00, (byte) 0x14, (byte) 0xaf, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08};
        //CheckDecorator board = new BoardSend485Check(null);
        //CheckDecorator gw645 = new GW645ReadCheck(board);
        //System.out.println(gw645.check(msg));
        //for (byte datum : gw645.recvMsg) {
        //    System.out.print(String.format("%02x", datum) + " ");
        //}
    }

}
